package com.lx.pc.redis;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

@SuppressWarnings("unchecked")
public interface SpringRedisTemplate {
	
	/**
	 * 判断Key是否存在
	 * @param key
	 * @return
	 */
	Boolean exists(String key);
	
	/**
	 * save
	 */
	void save(String key, Serializable object);
	

	/**
	 * save expire
	 * 其中expireTime以秒为单位
	 */
	void save(String key, Serializable object, long expireTime);
	
	/**
	 * 读取
	 * @param key
	 * @return
	 */
	Object read(String key);

	/**
	 * 删除
	 * @param key
	 */
	Long delete(String key);
	
	/**
	 * 模糊匹配删除
	 * @param pattern
	 * @return
	 */
	//Long deleteByPattern(final String pattern);
	
	/**
	 * 将一个或多个值value插入到list列表key的表头。
	 * 如果key不存在，一个空列表会被创建并执行LPUSH操作。
	 * 当key存在但不是列表类型时，返回一个错误。
	 * @param key
	 * @param t
	 * @return
	 */
	<T> Long lpush(String key, T... t);
	
	/**
	 * 将一个或多个值value插入到list列表key的表尾。
	 * 如果key不存在，一个空列表会被创建并执行RPUSH操作。
	 * 当key存在但不是列表类型时，返回一个错误。
	 * @param key
	 * @param t
	 * @return
	 */
	<T> Long rpush(String key, T... t);
	
	/**
	 * 从list里面读取数据
	 * @param key
	 * @param begin
	 * @param end
	 * @param c
	 * @return
	 */
	<T> List<T> lrange(String key, int begin, int end, Class<T> c);
	
	/**
	 * 取得list的长度
	 * @param key
	 * @return
	 */
	Long llen(String key);
	
	/**
	 * map方式存值
	 * @param key
	 * @param field
	 * @param value
	 * @return
	 */
	Boolean hset(String key, String field, Serializable value);
	
	/**
	 * 从map中取值
	 * @param key
	 * @param field
	 * @return
	 */
	Object hget(String key, String field);
	
	/**
	 * 从cache中取到map, value为object
	 * @param key
	 * @return
	 */
	Map<String, Object> hgetAll(String key);
	
	/**
	 * 从map中删除多个field
	 * @param key
	 * @param fields
	 * @return
	 */
	Long hdel(String key, String... fields);
	
	/**
	 * 给指定key设置过期时间
	 * @param key
	 * @param seconds
	 * @return
	 */
	Boolean expire(String key, long expireTime);
	
	/**
	 * 获取匹配列表
	 * @param pattern
	 * @return
	 */
	<T> List<T> keys(String pattern);
	
}
